home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-07-28 | 5.3 KB | 235 lines | [TEXT/MPS ] |
- /*
- File: HandleObject.cp
-
- Copyright: © 1991-1994 by Apple Computer, Inc.
- All rights reserved.
-
- Part of the AOCE Sample SMSAM Package. Consult the license
- which came with this software for your specific legal rights.
-
- */
-
-
-
- #ifndef __HANDLEOBJECT__
- #include "HandleObject.h"
- #endif
-
- #ifndef __DEBUGASSERT__
- #include "DebugAssert.h"
- #endif
-
- #ifndef __IOSTREAM__
- #include "IOStream.h"
- #endif
-
- /***********************************|****************************************/
-
- #pragma segment HandleObject
-
- /***********************************|****************************************/
-
- ostream& operator << ( ostream& s, const THandleObject* o )
- {
- if ( o )
- return *o >> s;
- else
- return s << "<NIL>";
- }
-
- /***********************************|****************************************/
-
- THandleObject::THandleObject ()
- {
- #if defined ( debug )
- fTag = kHandleObjectTag;
- #endif
- }
-
- /***********************************|****************************************/
-
- THandleObject::THandleObject ( const THandleObject& )
- {
- #if defined ( debug )
- fTag = kHandleObjectTag;
- #endif
- }
-
- /***********************************|****************************************/
-
- THandleObject::~THandleObject() {
- #if debug
- fTag = '\?\?\?\?';
- #endif
- }
-
- /***********************************|****************************************/
-
- ostream& THandleObject::operator >> ( ostream& s ) const
- {
- return s << "THandleObject @ " << (void*) this;
- }
-
- /***********************************|****************************************/
-
- THandleObject& THandleObject::operator = ( const THandleObject& that )
- {
- ASSERT ( this != &that );
- return *this;
- }
-
- /***********************************|****************************************/
-
- THandleObject::THandleObject ( Boolean lock )
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- if ( lock )
- Lock ();
- #endif
- }
-
- /***********************************|****************************************/
-
- SignedByte THandleObject::GetState()
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- return HGetState((Handle)this);
- #else
- return 0;
- #endif
- }
-
- /***********************************|****************************************/
-
- void THandleObject::Lock()
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- HLock((Handle)this);
- #endif
- }
-
- /***********************************|****************************************/
-
- void THandleObject::MoveHigh()
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- MoveHHi((Handle)this);
- #endif
- }
-
- /***********************************|****************************************/
-
- void THandleObject::SetState(SignedByte flags)
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- HSetState((Handle)this, flags);
- #endif
- }
-
- /***********************************|****************************************/
-
- void THandleObject::Unlock()
- {
- #if defined ( ENABLE_HANDLE_OBJECTS)
- HUnlock((Handle)this);
- #endif
- }
-
- /***********************************|****************************************/
-
- SignedByte THandleObject::LockHigh() {
- #if defined ( ENABLE_HANDLE_OBJECTS )
- SignedByte oldState = GetState();
- MoveHigh();
- Lock();
- return oldState;
- #else
- return 0;
- #endif
- }
-
- /***********************************|****************************************/
-
- #if defined ( debug )
-
- Boolean THandleObject::IsAHandleObject ( Handle h )
- {
- THandleObject* o = (THandleObject *) h;
-
- return o->fTag == kHandleObjectTag;
- }
-
- #endif
-
- /***********************************|****************************************/
-
- #if defined ( debug )
-
- Boolean foo () { return true; }
- Boolean foo2 ( ) { return false; }
-
- Boolean THandleObject::IsValidObject ( Boolean mustReturn ) const
- {
- #if defined ( ENABLE_HANDLE_OBJECTS )
- Handle h = (Handle) this;
-
- if ( ( ( (long) h ) & 0x00000001 ) || // If the handle master is odd,
- ( h < (Handle) & ( ApplicZone ()->heapData ) ) || // or below the application zone
- ( h > (Handle) ApplicZone()->bkLim ) ) // or above the application zone
- {
- keith << "THandleObject::IsValidObject(), bad object master pointer." << endl;
- }
- else if ( ( ( (long) *h ) & 0x00000001 ) || // If the object pointer is odd,
- ( *h < (Ptr) & ( ApplicZone ()->heapData ) ) || // or below the application zone
- ( *h > ApplicZone()->bkLim ) ) // or above the application zone
- {
- keith << "THandleObject::IsValidObject(), bad object pointer." << endl;
- }
- else if ( fTag != kHandleObjectTag )
- {
- keith << "THandleObject::IsValidObject(), fTag != kHandleObjectTag." << endl;
- }
- else
- {
- return true;
- }
-
- // If we get here, the object is bad, so print out a stack crawl,
- // call Failure() for the current thread, and exit.
- if ( ! mustReturn )
- FAIL ( -1 );
-
- return false;
-
- #else // ENABLE_HANDLE_OBJECTS
- Ptr p = (Ptr) this;
-
- if ( ( ( (long) p ) & 0x00000001 ) || // If the object pointer is odd,
- ( p < (Ptr) & ( ApplicZone ()->heapData ) ) || // or below the application zone
- ( p > ApplicZone()->bkLim ) ) // or above the application zone
- {
- keith << "THandleObject::IsValidObject(), bad object pointer." << endl;
- }
- else if ( fTag != kHandleObjectTag )
- {
- keith << "THandleObject::IsValidObject(), fTag != kHandleObjectTag." << endl;
- }
- else
- {
- return true;
- }
-
- // If we get here, the object is bad, so print out a stack crawl,
- // call Failure() for the current thread, and exit.
- if ( ! mustReturn )
- FAIL ( -1 );
-
- return false;
-
- #endif // ENABLE_HANDLE_OBJECTS
- }
-
- #endif
-
- /***********************************|****************************************/
-